var express = require('express');
var router = express.Router();
const { Success, MError } = require("../utils/Result");
const { alipay } = require('../config/global');
// 引入支付模块
const AlipaySdk = require('alipay-sdk').default
const AlipayFormData = require('alipay-sdk/lib/form').default

//支付宝支付返回form表单
router.post("/alipay", async (req, res) => {
	// 获取支付基本参数  子订单交易号 总支付金额
	let { outTradeNo, totalAmount, type } = req['body'];
	// 验证基本参数
	if (!outTradeNo || totalAmount < 0 || (type != 1 && type != 2)) {
		res.send(MError("缺少支付参数")); return;
	}
	// 初始化插件
	const alipaySdk = new AlipaySdk({
		//此处使用的是沙箱环境appId
		appId: alipay.appId,
		gateway: 'https://openapi.alipaydev.com/gateway.do',
		signType: 'RSA2', // 注意这里默认是RSA2， 正常不要配置
		// 支付宝公钥
		alipayPublicKey: alipay.publicKey,
		// 支付宝私钥
		privateKey: alipay.privateKey
	});
	const formData = new AlipayFormData()
	// 调用 setMethod 并传入 get，会返回可以跳转到支付页面的 url
	// formData.setMethod('get')
	// 配置回调接口
	//异步通知地址，需要配置内网穿透(钉钉)
	formData.addField('notifyUrl', alipay.notifyBaseUrl + '/api/notifyUrl')
	//同步通知地址
	formData.addField('returnUrl', 'http://localhost:8080/#/pages/orderlist/orderlist')
	// 设置参数
	formData.addField('bizContent', {
		outTradeNo,
		productCode: 'FAST_INSTANT_TRADE_PAY',
		totalAmount,
		subject: '商品',
		body: '商品详情',
	});

	// 根据请求type类型获取请求支付form表单 1是返回手机网站支付 2是返回pc端网站支付
	let payUrl = type == 1 ? 'alipay.trade.wap.pay' : 'alipay.trade.page.pay'
	console.log(type)
	// 请求接口
	const result = await alipaySdk.exec(
		payUrl,
		{},
		{ formData: formData },
	);

	// result 为可以跳转到支付链接的 url
	res.send(Success(result));

});

module.exports = router;